/*******************************************************************************
 * Copyright 2011 Google Inc. All Rights Reserved.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *******************************************************************************/
package co.edu.udea.gwt.server;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import co.edu.udea.gwt.client.ServiciosGeneralesRemotos;
import co.edu.udea.gwt.client.modelgwt.DispositivosGWT;
import co.edu.udea.gwt.client.modelgwt.Generales;
import co.edu.udea.gwt.client.modelgwt.SolicitudGWT;
import co.edu.udea.gwt.client.modelgwt.UsuariosGWT;
import co.edu.udea.model.Dispositivo;
import co.edu.udea.model.Solicitud;
import co.edu.udea.model.Usuario;
import co.udea.businesslogic.imp.ServicioDispositivo;
import co.udea.businesslogic.imp.ServicioSolicitud;
import co.udea.businesslogic.imp.ServicioUsuario;
import exceptions.ExecptionRTF;



@SuppressWarnings("serial")
public class ServiciosGeneralesRemotosImpl extends SpringRemoteService implements ServiciosGeneralesRemotos {
	
	ServicioSolicitud solicitudServ;
	ServicioDispositivo dispositivoServ;
	ServicioUsuario usuarioServ;
	
	
	@Override
	public Generales traerObjetos() {
		dispositivoServ = getServiceDispositivo();
		List<Dispositivo> listaDispositivos = new ArrayList<Dispositivo>();
		solicitudServ = getServiceSolicitud();
		
		
		Dispositivo pro = new Dispositivo();
		listaDispositivos.add(pro);
		
		try {
			listaDispositivos = dispositivoServ.consultarDispositivos();
		} catch (ExecptionRTF e) {
			return null;
		}
		
		List<DispositivosGWT> dispositivosGWt = new ArrayList<DispositivosGWT>();
		
		for(Dispositivo dispositivo : listaDispositivos) {
			DispositivosGWT producGWT = new DispositivosGWT();
			producGWT.setCodigoDispositivo(dispositivo.getCodigoDispositivo());
			producGWT.setNombre(dispositivo.getNombreDispositivo());
			dispositivosGWt.add(producGWT);
		}
		
		Generales gen = new Generales();
		gen.setProductosGWTs(dispositivosGWt);

		return gen;
	}
	
	@Override
	public boolean guardarSolicitud(SolicitudGWT solicitudGWT) {
		//llamando el bean para guardar la solicitud
		solicitudServ = getServiceSolicitud();
	
				//transportando datos de el pojo a la clase
				Dispositivo dispositivo = new Dispositivo();
				dispositivo.setCodigoDispositivo(solicitudGWT.getDispositivo().getcodigoDispositivo());
				Solicitud solicitud = new Solicitud();
				Usuario user = new Usuario();
				user.setNombreUsuario(solicitudGWT.getUsuario().getNombreUsuario());
				user.setIdentificacionUsuario(solicitudGWT.getUsuario().getIdentificacionUsuario());
				user.setTelefonoUsuario(solicitudGWT.getUsuario().getTelefonoUsuario());
				user.setCorreoUsuario(solicitudGWT.getUsuario().getCorreoUsuario());
				solicitud.setUsuario(user);
				solicitud.setDispositivo(dispositivo);
				solicitud.setFechaSolicitud(new Date());
				solicitud.setEstadoSolicitud("Pendiente");

				try {
						solicitudServ.generarSolicitud(solicitud);
						} catch (ExecptionRTF e) {
						e.printStackTrace();
						return false;
					} 
				catch (NullPointerException e) {
					e.printStackTrace();
					return false;
				} 
		return true;
	}

	@Override
	public Generales consultarUsuario(String documento) {
		usuarioServ = getServiceUsuario();
		Usuario user = new Usuario();
		user.setIdentificacionUsuario(documento);
		try {
			user = usuarioServ.consultar(user);
		} catch (ExecptionRTF e) {
			e.printStackTrace();
			return null;
		}
		if(user != null ) {
			UsuariosGWT userGwt = new UsuariosGWT();
			userGwt.setNombreUsuario(user.getNombreUsuario());
			userGwt.setCorreoUsuario(user.getCorreoUsuario());
			userGwt.setTelefonoUsuario(user.getTelefonoUsuario());
			
			Generales gen = new Generales();
			gen.setUsuariosGWT(userGwt);
			return gen;
		} else {
			return null;
		}
	}

	@Override
	public Generales consultarSolicitudes(String documento) {
		solicitudServ = getServiceSolicitud();
		List<SolicitudGWT> listaSolicitudGWt = new ArrayList<SolicitudGWT>();
		List<Solicitud> listaSolicitudes = new ArrayList<Solicitud>();
		try {
			listaSolicitudes = solicitudServ.obetenrPendientes(documento);
		} catch (ExecptionRTF e) {
			e.printStackTrace();
			return null;
		}
		
		
		for(Solicitud solicitud : listaSolicitudes) {
			SolicitudGWT solicitudGWT = new SolicitudGWT();
			DispositivosGWT dispositivoGWT = new DispositivosGWT();
			UsuariosGWT userGWT = new UsuariosGWT();
			userGWT.setNombreUsuario(solicitud.getUsuario().getNombreUsuario());
			userGWT.setIdentificacionUsuario(solicitud.getUsuario().getIdentificacionUsuario());
			userGWT.setCorreoUsuario(solicitud.getUsuario().getCorreoUsuario());				
			userGWT.setTelefonoUsuario(solicitud.getUsuario().getTelefonoUsuario());
			solicitudGWT.setUsuario(userGWT);
			dispositivoGWT.setcodigoDispositivo(solicitud.getDispositivo().getCodigoDispositivo());
			dispositivoGWT.setNombre(solicitud.getDispositivo().getNombreDispositivo());
			dispositivoGWT.setEstadoDispositivo(solicitud.getDispositivo().getEstadoDispositivo());
			solicitudGWT.setDispositivo(dispositivoGWT);
			
			solicitudGWT.setCodigoSolicitud(solicitud.getCodigoSolicitud());
			solicitudGWT.setEstadoSolicitud(solicitud.getEstadoSolicitud());
			solicitudGWT.setFechaSolicitud(solicitud.getFechaSolicitud());
			solicitudGWT.setHoraFinPrestamo(solicitud.getHoraFinPrestamo());
			solicitudGWT.setHoraInicioPrestamo(solicitud.getHoraInicioPrestamo());
			listaSolicitudGWt.add(solicitudGWT);
			
		}
		
		Generales gen = new Generales();
		gen.setSolicitudesGWTs(listaSolicitudGWt);
		return gen;
	}

}
